package com.mq.mqserver.core;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;

/**
 * 交换机设置
 */
@Data
public class Exchange {
    //交换机的唯一标识符
    private String name;
    //交换机的类型
    private ExchangeType type = ExchangeType.FANOUT;
    //是否持久化,false 非持久化
    private boolean durable = false;
    //是否自动删除
    private boolean autoDelete = false;
    //自定义参数
    private Map<String,Object> args = new HashMap<>();

    //这里的get set为了和数据库中数据类型匹配
    //为了和数据库对应,获取数据的时候,要将Map转换为字符串
    //读取数据的时候,再将数据库中的字符串转换为Map类型
    public String getArgs(){
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            return objectMapper.writeValueAsString(args);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
//            throw new RuntimeException(e);
        }
        return "{}";
    }

    public void setArgs(String args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        //              将字符串转换为HashMap类型,若转换为基本数据类型时直接填就行,
        //              这里转换的是HashMap集合类型,比较复杂,需要借助匿名内部类TypeReference类实现
        this.args = mapper.readValue(args,new TypeReference<HashMap<String,Object>>(){});
    }

    //这一对set get方法是用在java代码中使用的,如测试用例的,上面的一组是针对数据库使用的
    public Object getArgs(String key){
        return args.get(key);
    }
    public void setArgs(String key,Object val){
        args.put(key,val);
    }

    public void setArgs(Map<String,Object> args){
        this.args = args;
    }
}
